<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:gml="http://www.opengis.net/gml" xmlns:ogr="http://ogr.maptools.org/">
<xsl:output method="text" indent="yes" />
<xsl:template match="/ogr:FeatureCollection">

	<xsl:for-each select='gml:featureMember/ogr:NUTS_RG_60M_2006' >
		
		<xsl:result-document href="{concat('id/',ogr:NUTS_ID,'_geometry.ttl')}">
@prefix geo: &lt;http://www.w3.org/2003/01/geo/wgs84_pos#&gt; .
@prefix rdf: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt; .
@prefix nuts: &lt;http://nuts.geovocab.org/id/&gt; .
@prefix ngeo: &lt;http://geovocab.org/geometry#&gt; .
@prefix owl: &lt;http://www.w3.org/2002/07/owl#&gt; .
@prefix dc: &lt;http://purl.org/dc/elements/1.1/&gt; .

nuts:<xsl:value-of select="ogr:NUTS_ID"/>_geometry dc:rights "© EuroGeographics for the administrative boundaries." .
			
			<xsl:apply-templates select="ogr:geometryProperty/child::node()">
				<xsl:with-param name="geometry_id" select="concat('nuts:',ogr:NUTS_ID,'_geometry')" />
			</xsl:apply-templates>
		</xsl:result-document>

	</xsl:for-each>

</xsl:template>

<xsl:template match="gml:MultiPolygon|gml:MultiSurface">
	<xsl:param name="geometry_id" />
<xsl:value-of select="$geometry_id" /> rdf:type ngeo:MultiPolygon .
	<xsl:apply-templates select="child::gml:polygonMember|child::gml:surfaceMember">
		<xsl:with-param name="geometry_id" select="$geometry_id" />
	</xsl:apply-templates>
</xsl:template>

<xsl:template match="gml:polygonMember|gml:surfaceMember">
	<xsl:param name="geometry_id" />
	<xsl:variable name="member_id" select="concat('_:',generate-id())"/>
<xsl:value-of select="$geometry_id" /> ngeo:polygonMember <xsl:value-of select="$member_id"/> .
	<xsl:apply-templates select="child::gml:Polygon|child::gml:Surface">
		<xsl:with-param name="geometry_id" select="$member_id" />
	</xsl:apply-templates>
</xsl:template>

<xsl:template match="gml:Polygon|gml:Surface">
	<xsl:param name="geometry_id" />
<xsl:value-of select="$geometry_id" /> rdf:type ngeo:Polygon .
	<xsl:apply-templates select="gml:interior|gml:innerBoundaryIs|gml:exterior|gml:outerBoundaryIs">
		<xsl:with-param name="geometry_id" select="$geometry_id" />
	</xsl:apply-templates>
</xsl:template>

<xsl:template match="gml:interior|gml:innerBoundaryIs">
	<xsl:param name="geometry_id" />
	<xsl:variable name="bnode_id" select="concat('_:',generate-id(gml:LinearRing))"/>
<xsl:value-of select="$geometry_id" /> ngeo:interior <xsl:value-of select="$bnode_id"/> .
	<xsl:apply-templates select="child::gml:LinearRing">
		<xsl:with-param name="geometry_id" select="$geometry_id" />
		<xsl:with-param name="bnode_id" select="$bnode_id" />
	</xsl:apply-templates>
</xsl:template>

<xsl:template match="gml:exterior|gml:outerBoundaryIs">
	<xsl:param name="geometry_id" />
	<xsl:variable name="bnode_id" select="concat('_:',generate-id(gml:LinearRing))"/>
<xsl:value-of select="$geometry_id" /> ngeo:exterior <xsl:value-of select="$bnode_id"/> .
	<xsl:apply-templates select="child::gml:LinearRing">
		<xsl:with-param name="geometry_id" select="$geometry_id" />
		<xsl:with-param name="bnode_id" select="$bnode_id" />
	</xsl:apply-templates>
</xsl:template>

<xsl:template match="gml:LinearRing">
	<xsl:param name="geometry_id" />
	<xsl:param name="bnode_id" />
	
<xsl:value-of select="$bnode_id"/> rdf:type ngeo:LinearRing .
	<xsl:apply-templates select="child::gml:posList|child::gml:coordinates">
		<xsl:with-param name="geometry_id" select="$bnode_id"/>
	</xsl:apply-templates>
</xsl:template>

<xsl:template match="gml:LineString|gml:Curve">
	<xsl:param name="geometry_id" />
<xsl:value-of select="$geometry_id"/> rdf:type ngeo:LineString .
	<xsl:apply-templates select="child::gml:posList|child::gml:coordinates">
		<xsl:with-param name="geometry_id" select="concat('_:',generate-id())"/>
	</xsl:apply-templates>
</xsl:template>

<xsl:template match="gml:posList|gml:coordinates">
	<xsl:param name="geometry_id" />
<xsl:value-of select="$geometry_id"/> ngeo:posList ( 
	
	<xsl:call-template name="format-posList">
        <xsl:with-param name="text" select="self::node()"/>
    </xsl:call-template>
	
) .
</xsl:template>

<xsl:template name="format-posList">
  <xsl:param name="text"/>
  <xsl:choose>
    <xsl:when test="not(contains($text, ','))">
      <xsl:value-of select="$text"/>
    </xsl:when>
    <xsl:otherwise>
      [ geo:long "<xsl:value-of select="substring-before($text, ',')"/>"; 
      <xsl:call-template name="format-posList-close">
        <xsl:with-param name="text" select="substring-after($text, ',')"/>
      </xsl:call-template>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

<xsl:template name="format-posList-close">
  <xsl:param name="text"/>
  <xsl:choose>
    <xsl:when test="not(contains($text, ' '))">
      geo:lat "<xsl:value-of select="$text"/>" ]
    </xsl:when>
    <xsl:otherwise>
      geo:lat "<xsl:value-of select="substring-before($text, ' ')"/>" ]
      <xsl:call-template name="format-posList">
        <xsl:with-param name="text" select="substring-after($text, ' ')"/>
      </xsl:call-template>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

</xsl:stylesheet>